LIBRARY "graphics.library" PRINT:PRINT:PRINT PRINT SPC(28);"Converted to AmigaBasic" PRINT PRINT SPC(39);"By" PRINT PRINT SPC(35);"Rick Wirch" PRINT PRINT SPC(26);"Press Mouse Button to Start" WHILE B=0: B= MOUSE(0): WEND WHILE B<>0:B= MOUSE(0): WEND 10 REM OTHELLO 20 DIM A(10,10),I4(9),J4(9),strat%(10,10) 30 FOR i=1 TO 10: FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i 40 SCREEN 1,640,200,3,2 50 CLS 60 COLOR 1 70 DIM green%(1), red%(1),gblock%(500),square%(1000) 80 green%(0)=0: red%(0)=&Hffff 90 w=39:h=17: pc=1: REM width and height of board squares 100 WINDOW 2,"Board",(250,11)-(629,186),0,1: WINDOW OUTPUT 2 RP& = WINDOW( 8) 110 WINDOW 3,"Othello",(0,11)-(238,186),0,1: REM 120 WINDOW OUTPUT 2:COLOR 1 125 PALETTE 0, 6/15, 9/15, 15/15:PALETTE 1, 1,1,1: PALETTE 2, 0,0,0 130 PALETTE 4, 14/15, 3/15, 0/15:PALETTE 5, 5/15, 13/15, 0/15 140 f2=0 150 GOSUB 1560 200 FOR i=1 TO 10:FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i 210 PRINT"Shall I use my best strategy?" PRINT"(Click Yes OR No)": GOSUB 2200 220 IF x$="N" THEN 280 230 IF x$<>"Y" THEN 210 240 DATA 4,-1,2,2,2,2,-1,4 250 FOR i=2 TO 9 STEP 7:RESTORE 240: FOR j=2 TO 9:READ strat%(i,j): NEXT j,i 260 FOR j=2 TO 9 STEP 7: RESTORE 240: FOR i=2 TO 9:READ strat%(i,j): NEXT i,j 270 FOR i=3 TO 8 STEP 5:FOR j=3 TO 8 STEP 5:strat%(i,j)=-1:NEXT j,i 280 B=-1: Wt=1 290 RESTORE 310 300 FOR K =2 TO 9:READ I4(K):NEXT 310 DATA 0,-1,-1,-1,0,1,1,1 320 FOR K =2 TO 9:READ J4(K): NEXT 330 DATA 1,1,0,-1,-1,-1,0,1 340 FOR i = 1 TO 10: FOR j = 1 TO 10: A(i,j)=0:NEXT j,i 350 A(5,5)=Wt:A(6,6)=Wt:A(5,6)=B:A(6,5)=B 360 C1 =2:H1 =2: Z =0 370 N1 =4 380 hu=Wt:c=B 390 WINDOW OUTPUT 3 :PRINT "You will play White." 400 GOSUB 1560 : REM draw board and pieces. 410 PRINT"Do you want to go first?" PRINT"(Click Y OR N)" 420 GOSUB 2200 430 IF x$ = "N" THEN 460 440 IF x$<>"Y" THEN 410 450 GOTO 790 460 PRINT"I'm thinking.": B1=-1:J3=0:I3=0:T1=c:T2=hu 470 FOR i = 2 TO 9 480 FOR j = 2 TO 9 490 IF A(i,j)<>0 THEN 580 500 GOSUB 1340 510 IF F1 = 0 THEN 580 520 U=-1:GOSUB 1420: IF S1=0 THEN 580 530 S1=S1+strat%(i,j) 540 IF S1B1 THEN 570 560 IF RND(100)>50 THEN 580 570 B1 = S1: I3 = i:J3 = j 580 NEXT j,i 590 IF B1>0 THEN 630 600 PRINT"I have to forfeit my move." 610 IF Z = 1 THEN 1060 620 Z = 1: GOTO 790 630 Z=0 640 PRINT"I'll circle my next move" 650 pc=0:x=I3-2:y=J3-2:WINDOW OUTPUT 2:GOSUB 1720:pc=1 660 i=I3:j=J3:GOSUB 1420: REM get # captured pieces. 670 C1=C1+S1+1:H1=H1-S1:N1=N1+1 680 PRINT"That will give me" 690 PRINT S1;" of your pieces." 700 IF f2=0 THEN SLEEP: GOTO 760 710 PRINT"Click left button when" 720 PRINT"you're ready for me to" 730 PRINT"complete my play." 740 ' 750 B% = MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2):IF B%=0 THEN GOTO 750 755 WHILE B%<>0: B%= MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2): WEND 760 i=I3:j=J3:U=1:GOSUB 1420: REM flip captured pieces 770 IF H1=0 THEN 1060 780 IF N1=64 THEN 1060 790 T1=hu:T2=c 800 PRINT "Click on your move square." 810 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3 820 IF y>7 AND y<10 THEN IF x>0 AND x<4 THEN pr% = 2 ELSEIF x>3 AND x<7 THEN pr% = 1 ELSE pr% = 4 END IF ELSE IF y>-1 AND y<8 AND x>-1 AND x<8 THEN pr%=3 :ELSE pr%=4 END IF 830 ON pr% GOTO 1280,840,880,800 840 PRINT"You are forfeiting your turn." 850 IF Z=1 THEN 1060 860 Z=1 870 GOTO 460 880 i=x+2: j=y+2: IF A(i,j)=0 THEN 910 890 PRINT"Sorry; that square is" 900 PRINT"occupied; try again.": GOTO 800 910 GOSUB 1340: IF F1=1 THEN 950 920 PRINT"Sorry; you're not next to " 930 PRINT " one of my pieces;" 940 PRINT"Try again.":GOTO 800 950 U=-1: GOSUB 1420: IF S1>0 THEN 990 960 PRINT"Sorry, that doesn't flank" 970 PRINT"a row; try again." 980 GOTO 800 990 Z=0:PRINT"That gives you " 1000 PRINT S1;" of my pieces." 1010 U=1: GOSUB 1420 1020 H1=H1+S1+1: C1=C1-S1: N1=N1+1 1030 IF C1=0 THEN 1060 1040 IF N1=64 THEN 1060 1050 GOTO 460 1060 PRINT: PRINT"You have ";H1;" pieces," 1070 PRINT "and I have ";C1;" pieces." 1080 IF H1=C1 THEN 1120 1090 IF H1>C1 THEN 1130 1100 PRINT"Sorry, I won that one." 1110 GOTO 1140 1120 PRINT"A Tie!": GOTO 1270 1130 PRINT"YOU WON!!" 1140 C1=C1-H1: IF C1>0 THEN 1160 1150 C1=-C1 1160 C1=64*C1/N1 1170 PRINT"That was a "; 1180 IF C1<11 THEN 1260 1190 IF C1<25 THEN 1250 1200 IF C1<39 THEN 1240 1210 IF C1<53 THEN 1230 1220 PRINT"PERFECT GAME!": GOTO 1270 1230 PRINT"Walkaway.": GOTO 1270 1240 PRINT"Real Fight.": GOTO 1270 1250 PRINT"Hot Game!": GOTO 1270 1260 PRINT"Squeaker!!" 1270 PRINT 1280 PRINT"Do you want to play another " PRINT"game? (Click Y OR N)" 1290 GOSUB 2200 1300 IF x$="Y" THEN RESTORE 310: GOTO 200 1310 PRINT"Thanks for playing!" 1320 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1 1330 END 1340 F1=0: FOR I1 = -1 TO 1 1350 FOR J1= -1 TO 1 1360 IF A(i+I1, j+J1)=T2 THEN F1=1:I1=1:J1=1 1370 NEXT J1, I1 1380 RETURN 1390 REM 1400 REM 1410 REM 1420 S1=0 1430 FOR K=2 TO 9:I5=I4(K):J5=J4(K):I6=i+I5:J6=j+J5 1440 S3=0: IF A(I6,J6)<>T2 THEN 1510 1450 S3=S3+1:I6=I6+I5:J6=J6+J5:IF A(I6,J6)=T1 THEN 1480 1460 IF A(I6,J6)=0 THEN 1510 1470 GOTO 1450 1480 S1=S1+S3: IF U<>1 THEN 1510 1490 I6=i:J6=j: FOR K1=0 TO S3 1500 A(I6,J6)=T1: GOSUB 2180: I6=I6+I5:J6=J6+J5:NEXT K1 1510 NEXT K 1520 RETURN 1530 REM 1540 REM 1550 REM 1560 WINDOW OUTPUT 2: GOSUB 1890: REM Draw Game Board 1570 FOR i=2 TO 9: FOR j=2 TO 9 1580 state%=A(i,j)+2: x=i-2: y=j-2 1590 ON state% GOSUB 1690, 1700, 1680 1600 NEXT j,i 1610 WINDOW OUTPUT 3: COLOR 1 1620 RETURN 1630 REM ***** end routine ***** 1640 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1 1650 REM 1660 END 1670 REM ***** the white and black piece plotters ***** 1680 WINDOW OUTPUT 2: COLOR 1: GOTO 1720: REM white piece maker. 1690 WINDOW OUTPUT 2: COLOR 2: GOTO 1720: REM black piece maker 1700 RETURN: REM dummy; don't-put-piece subroutine. 1710 REM 1720 REM ***** piece maker ***** 1730 cx0=x0+INT(w/2)+x*w : cy0=INT(h/2)+y*h 1740 CIRCLE(cx0,cy0), 12 1750 IF pc=0 THEN 1780 1760 PATTERN red% 1770 PAINT(cx0,cy0) 1780 COLOR 1: WINDOW OUTPUT 3 1790 RETURN 1800 REM 1810 REM 1820 REM ***** Get x, y of mouse when left button pressed. 1830 REM 1840 REM 1850 B% = MOUSE( 0) : IF B%=0 THEN GOTO 1850 1860 WHILE B%<>0: B% = MOUSE( 0): xm%= MOUSE( 1): ym%= MOUSE( 2): WEND 1870 x=INT((xm%-42)/w)-6 :y=INT(ym%/h) 1880 RETURN 1890 REM ***** DRAW GAME BOARD ***** 1900 ' 1910 ' 1920 ' 1930 wb=8*w: hb=8*h 1940 x0=30 : COLOR 4 1950 AREA( x0,0): AREA( x0+wb-1,0): AREA( x0+wb-1,hb-1): AREA( x0,hb-1 ): AREAFILL 1960 COLOR 5 1970 AREA (x0,0): AREA (x0+w-1,0): AREA (x0+w-1,h-1): AREA (x0,h-1): AREAFILL 1980 GET(x0,0)-(x0+w,h),gblock% 1990 PUT(x0+w,h),gblock%,PSET 2000 GET(x0,0)-(x0+2*w,2*h),square% 2010 FOR i=x0 TO x0+6*w STEP 2*w 2020 FOR j=0 TO 6*h STEP 2*h 2030 PUT(i,j),square%,PSET 2040 NEXT j,i 2050 REM 2060 REM 2070 REM ***** draw forfeit and quit boxes 2080 REM 2090 COLOR 1, 0: REM 2095 CALL Move( RP&,103,154): PRINT "FORFEIT":CALL Move( RP&, 215, 154): PRINT " QUIT " 2097 CALL Move( RP&, 35,154): PRINT "YES":CALL Move( RP&, 312,154):PRINT " NO" 2100 LINE (90,144)-(170,159),,B : LINE(202,144)-(282,159),,B 2110 LINE (30,144)-(65,159),,B : LINE(307,144)-(342,159),,B 2120 REM 2150 REM 2160 WINDOW OUTPUT 3: COLOR 1 2170 RETURN 2180 x=I6-2:y=J6-2: IF T1=hu THEN GOSUB 1680 :ELSE GOSUB 1690 2190 RETURN 2200 REM SUBRTN TO GET YES OR NO FROM MOUSE. 2210 REM 2220 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3 2230 IF y>7 AND y<10 THEN IF x=0 THEN x$="Y" ELSEIF x=7 THEN x$="N" ELSE x$="" END IF ELSE x$="" END IF 2240 RETURN